import os

import sys

def main():
    # 输入要处理的文件名称或者文件路径
    print("----大文件文本切分工具----\n")
    # 可以传递绝对路径
    input_file=input("输入一个要处理的文件对象：").strip()
    # 判断文件是否存在
    while not os.path.exists(input_file):
        flag = input(f"输入{input_file}文件不存在，是否重新输入：y/n").strip()
        if flag == "y":
            input_file=input("请重新输入一个要处理的文件对象：").strip()
        elif flag == "n":
            print("程序结束。。。")
            return
        else:
            print("程序结束。。。")
            return

    # 设置输入处理文件拆分大小
    while True:
        try:
            file_block = int(input("输入拆分文件大小：").strip())
            if file_block <= 0:
                raise ValueError
            break
        except ValueError:
            print("输入拆分数据错误")

# 构建拆分文件名称
    #获取基本文件名称
    basename = os.path.splitext(input_file)[0]
    # 构建输出文件名称
    out_filename = f"{basename}_part0{{}}"

#获取拆分文件内容 使用数组进行内容缓存
    lines = []
    number = 1
    with open(input_file,"r",encoding='utf-8') as f_in:
        for index , line in enumerate(f_in , 1):
            # 添加数据到缓存区
            lines.append(line)
            #判断添加内容
            if index % file_block == 0:
                out_file = out_filename.format(number)
                with open(out_file,"w",encoding='utf-8') as f_out:
                    f_out.writelines(lines)
                    # 进度提示
                    print(f"{input_file}已经成功读取到{file_block}行数据 拆分生成{out_file}")
                #     清除缓冲区
                lines.clear()
                number += 1
    #     添加剩余数据量
        if lines:
            out_file = out_filename.format(number)
            with open(out_file,"w",encoding='utf-8') as f_out:
                f_out.writelines(lines)
                print(f"{input_file}已经成功读取到{len(lines)}行数据 拆分生成{out_file}")
    print("程序结束")
    return 0



# 判断是不是主程序  是主程序就执行这个main函数 如果是其它程序导入该模块 不执行这个程序
if __name__ == '__main__':
    main()